package com.wl2o2o.lanqiao.xzfourteen;
/** 
* @author : WLei224
* @date ：2023年4月6日 上午11:30:49 
* 
*/

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class 蓝桥幼儿园 {

    //定义输入输出流，方便读写数据
    static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));

    //定义一个数组p，p[i]表示i的头结点是p[i]
    static int[] p;

    public static void main(String[] args) throws IOException{
        String[] s = in.readLine().split(" ");
        int n = Integer.parseInt(s[0]); //小朋友的个数
        int m = Integer.parseInt(s[1]); //操作的次数
        p = new int[n+1]; //初始化p数组，大小为n+1，因为小朋友的编号从1开始
        for(int i=1;i<=n;i++) {
            p[i] = i; //每个小朋友的根节点都是自己，即p[i] = i
        }
        for(int i=0;i<m;i++) {
            s = in.readLine().split(" ");
            int op = Integer.parseInt(s[0]); //操作类型，1表示合并，2表示查询
            int x = Integer.parseInt(s[1]); //小朋友x的编号
            int y = Integer.parseInt(s[2]); //小朋友y的编号
            if(op==1) { //如果是合并操作
                p[find(y)] = find(x); //将y所在的集合合并到x所在的集合中
            }else { //如果是查询操作
                System.out.println(find(x)==find(y)?"YES":"NO"); //判断x和y是否在同一个集合中
            }
        }
    }

    //查找x所在的集合的根节点
    static int find(int x) {
        if(p[x]!=x) { //如果x的父节点不是自己，说明x不是根节点
            p[x]=find(p[x]); //递归查找x的父节点，同时将x的父节点修改为根节点
        }
        return p[x]; //返回x所在的集合的根节点
    }
}
